function getCurrLoginUser(){
	var _user = null;
	$.jsonAjax("userServlet","getCurrLoginUser",{},null,false,function(rtnData){
		if(!isEmpty(rtnData)&&rtnData.data.status=="success"){
			_user = rtnData.data.content;
		}
	});
	return _user;
}
//初始化下拉框组件
InitAutocomplete = function(){
	var _this = this;
	this.dataJson = {};
	this.itemChangeCallBack = null;
	this._input = null;
	this._hideId = null;
	this.clearDiv =null;
	this.defaultVal = null;
	this.defaultName = null;
	this.init = function(config){
		_this.dataJson = undefined==config['dataJson']||null==config['dataJson']||typeof config['dataJson'] !="object"?{}:config['dataJson'];
		_this._input = config['_input'];
		_this._hideId = config['_hideId'];
		_this.clearDiv = config['clearDiv'];
		_this.defaultVal = config['defaultVal'];
		_this.defaultName = config['defaultName'];
		_this.itemChangeCallBack = config['itemChangeCallBack'];
		_this.initAutocomplete();
	}
	
	this.initAutocomplete = function(){
		$(_this._input).autocomplete(_this.dataJson,
		{
			minChars: 0,      					//自动完成激活之前填入的最小字符
		    singleClick:true,					//单击显示下拉框
			selectFirst: false,
	        width: $(_this._input).width()+55,
	        scrollHeight:200, 					//提示的高度，溢出显示滚动条
			scroll: true,     					//滚动条
			max: _this.dataJson.length,           	//列表里的条目数
			matchContains: true,				//包含匹配，就是data参数里的数据，是否只要包含文本框里的数据就显示
			mustMatch: false,					//如果设置为true,autoComplete只会允许匹配的结果出现在输入框,所有当用户输入的是非法字符时将会得不到下拉框.Default: false
			matchContains: true,				//是否只要包含文本框里的就可以
	        autoFill:false,						//自动填充
			formatItem: function(data, i, max){ //格式化列表中的条目 row:条目对象,i:当前条目数,max:总条目数
				return data.NAME;
		    },
		    formatMatch: function(data, i, max){ //配合formatItem使用，作用在于，由于使用了formatItem，所以条目中的内容有所改变，而我们要匹配的是原始的数据，所以用formatMatch做一个调整，使之匹配原始数据
		    	if(data.NAME){
					return data.NAME;
				}
		    },
			formatResult: function(data){         //定义最终返回输入框_input的数据，比如我们还是要返回原始数据，而不是formatItem过的数据
				if(data.NAME){
					return data.NAME;
				}
		    }
		}).result(function(event, data, formatted){
			if (data != undefined){
			    $(_this._hideId).val(data.ID);    
			    //选项变化时的回调函数
			    if(null!=_this.itemChangeCallBack){
			    	_this.itemChangeCallBack();
			    }
			}
		});
		
		//失去焦点时触发的事件
		$(_this._input).blur(function(){
			var val = $.trim(this.value);
			if (val == ""){
				$(_this._hideId).val(""); 	
			} else{
				var tempVal, tempInfo;
				tempVal = val.toUpperCase();
				var isExist = false;
				for (var k = 0; k < _this.dataJson.length; k++){
					tempInfo = _this.dataJson[k];
					if (tempInfo.NAME == val){
						isExist = true;
						break;
					} 
				}
				if(!isExist){
					$(_this._hideId).val("-1");
				}
			}
			if($(_this._hideId).val()=='-1'){
				$(_this._hideId).val(""); 
				$(_this._input).val(""); 
				if(_this.clearDiv){
					$(_this.clearDiv).val("");
				}
			}
		});
		
		//变更事件
		$(_this._input).keyup(function(event)
		{
			if(event.keyCode == "8" || event.keyCode == "46"){
				return false;
			}
			var val = $.trim(this.value);
			if (val != ""){
				var tempVal, tempInfo;
				tempVal = val.toUpperCase();
				for (var k = 0; k < _this.dataJson.length; k++){
					tempInfo = _this.dataJson[k];
					if (tempInfo.NAME != val){
						$(_this._hideId).val("-1");
					}
				}
			}
		});
	}
	
	this.setOption = function(dataJson){
		_this.dataJson = dataJson;
		$(_this._input).flushCache();
		$(_this._input).setOptions({"data":dataJson});
//		$(_this._input).val(dataJson[0].NAME);
//		$(_this._hideId).val(dataJson[0].ID);
	}
	
	this.flushCache = function(){
		$(_this._input).flushCache();
	}
}


function initCodeConfigComponent(_input,_hideId,reqData,clearDiv){
	var iac = new InitAutocomplete();
	iac.init({
		"_input":_input,
		"_hideId":_hideId,
		"clearDiv":null==clearDiv?null:clearDiv
	});
	$.jsonAjax("codeConfigServlet","getCodeConfig",reqData,null,false,function(rtnData){
		if(!isEmpty(rtnData)&&rtnData.data.status=="success"){
			dataJson = rtnData.data.content;
			var _dataJson = [];
			for(var i=0;i<dataJson.length;i++){
				_dataJson.push({"ID":dataJson[i].CODE,"VAL":dataJson[i].CODE,"NAME":dataJson[i].NAME});
			}
			iac.flushCache();
			iac.setOption(_dataJson);
		}
	});
	
}

//js验证只能输入正整数.
function check_integers(value){
    //定义正则表达式部分
    var reg = /^[1-9]\d*$/;
    if( value.constructor === String ){
        var re = value.match( reg );
        return true;
    }
    return false;
}
//js验证只能输入数字.
function check_number(value){
    //定义正则表达式部分
    var reg = /^\d+$/;
    if( value.constructor === String ){
        var re = value.match( reg );
        return true;
    }
    return false;
}
//js验证只能输入字母.数字和下划线. 
function check_letter_number(value){
    var reg = /^\w+$/;
    if( value.constructor === String ){
        var re = value.match( reg );
        return true;
    }
    return false;

}
/**
 * GUID生成工具
 * 
 * @type UUID
 * @class UUID
 */
var UUID = {
	S4 : function() {
		return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
	},
	/**
	 * 生成32位GUID,速度慢
	 * 
	 * @return {}
	 */
	randomUUID : function() {

		return (UUID.S4() + UUID.S4() + "-" + UUID.S4() + "-" + UUID.S4() + "-"
				+ UUID.S4() + "-" + UUID.S4() + UUID.S4() + UUID.S4());
	},
	d : new Date().getTime() + "_" + Math.random().toString().replace('.', '_')
			+ "_",
	c : 0,
	/**
	 * 生成客户端唯一ID,速度快
	 * 
	 * @return {}
	 */
	cID : function() {
		++UUID.c;
		return 'cid_' + UUID.d + UUID.c;
	}
};

/*function Alert(message,title,callback){
	 $("#myModal").on("shown.bs.modal",function(){
		 mm.init({"type":"message","message":message,"title":title});
		 if(callback) callback();
	 })
}*/

function isEmpty(obj){
	var flag = true;
	for(var item in obj){
		flag = false;
		break;
	}
	return flag;
}

function isNull(obj){
	if(undefined!=obj&&null!=obj){
		return false;
	}
	return true;
}


/**
 * ajax封装
 * serviceName servlet名
 * method servlet调用的方法名
 * data 发送到服务器的数据，数组存储，如：{"date": new Date().getTime(), "state": 1}
 * async 默认值: true。默认设置下，所有请求均为异步请求。如果需要发送同步请求，请将此选项设置为 false。
 *       注意，同步请求将锁住浏览器，用户其它操作必须等待请求完成才可以执行。
 * type 请求方式("POST" 或 "GET")， 默认为 "GET"
 * dataType 预期服务器返回的数据类型，常用的如：xml、html、json、text,此处只允许json
 * successfn 成功回调函数
 * errorfn 失败回调函数
 */
(function(jQuery) {
	jQuery.extend({
		jsonAjax:function(serviceName,methodName,data,type,async,successfn,errorfn) {
			if(null==serviceName||""==serviceName){
				alert("serviceName不能为空……");
				return;
			}
			if(null==methodName||""==methodName){
				alert("methodName不能为空……");
				return;
			}
			if (async!==false){
				async = (async==null || async=="" || typeof(async)=="undefined")? "true" : async;
			}	
			type = (type==null || type=="" || typeof(type)=="undefined")? "post" : type;
			if(undefined==errorfn||null==errorfn||typeof(errorfn)!="function"){
				errorfn= function(e){
					console.log("System Error!"+serviceName+"/"+methodName);
				}
			}
			
			$.ajax({
				type : type,
				async : async,
				data :data,
				url : "/ControlServlet/doPost.action?serviceName="+serviceName+"&methodName="+methodName,
				contentType : "application/x-www-form-urlencoded; charset=utf-8",
				dataType : "json",
				success : function(d) {
					successfn(d);
				},
				error : function(e) {
					  errorfn(e);
				}
			});
		}
	
	})
})(jQuery);

//取当前日期，格式为,yyyy/mm/dd
function getNowDate()
{
	var d,s;
  	d = new Date();
  	s = d.getFullYear() + "年";   //取年份
  	var month = d.getMonth()+1;	 //取月份
    if (month<10){
        month = "0"+month;
    }
  	s = s + month + "月";		
  	var day = d.getDate();		//取日期
  	if (day<10){
  		day = "0"+day;
    }
  	s += day + "日";         	
  	return(s);  
}
/*日期转化工具*/
DateUtil = function(){
	/**
	* 字符串转换为日期对象
	* @param date Date 格式为yyyy-MM-dd HH:mm:ss，必须按年月日时分秒的顺序，中间分隔符不限制
	*/
	this.strToDate = function(dateStr){
		var data = dateStr;  
		var reCat = /(\d{1,4})/gm;   
		var t = data.match(reCat);
		t[1] = t[1] - 1;
		eval('var d = new Date('+t.join(',')+');');
		return d;
	}
	
	/**
	* 比较日期差 dtEnd 格式为日期型或者有效日期格式字符串
	* @param strInterval string  可选值 y 年 m月 d日 w星期 ww周 h时 n分 s秒  
	* @param dtStart Date  可选值 y 年 m月 d日 w星期 ww周 h时 n分 s秒
	* @param dtEnd Date  可选值 y 年 m月 d日 w星期 ww周 h时 n分 s秒 
	*/
	this.dateDiff = function(strInterval, dtStart, dtEnd) {   
		switch (strInterval) {   
			case 's' :return parseInt((dtEnd - dtStart) / 1000);  
			case 'n' :return parseInt((dtEnd - dtStart) / 60000);  
			case 'h' :return parseInt((dtEnd - dtStart) / 3600000);  
			case 'd' :return parseInt((dtEnd - dtStart) / 86400000);  
			case 'w' :return parseInt((dtEnd - dtStart) / (86400000 * 7));  
			case 'm' :return (dtEnd.getMonth()+1)+((dtEnd.getFullYear()-dtStart.getFullYear())*12) - (dtStart.getMonth()+1);  
			case 'y' :return dtEnd.getFullYear() - dtStart.getFullYear();  
		}  
	}
}

/**
 * 转化时间为描述，如'昨天'、'3小时前'
 * @param time 时间  格式为 2015/11/16 17:00 
 */
function convertDateTime(dateTime){
	/*var date = dateTime.substring(0,dateTime.indexOf(' '));
	var time = dateTime.substring(dateTime.indexOf(' ')+1);
	var dateArr = date.split('/');
	var now = new Date();*/
	var dateUtil = new DateUtil();
	var now = new Date();
	var date = dateUtil.strToDate(dateTime);
	var result = "";
	if(dateUtil.dateDiff('s',date,now)<=0){
		result = "刚刚";
	} else if(dateUtil.dateDiff('s',date,now)<60){
		result = dateUtil.dateDiff('s',date,now)+"秒前";
	}else if(dateUtil.dateDiff('n',date,now)<60){
		result = dateUtil.dateDiff('n',date,now)+"分前";
	}else if(dateUtil.dateDiff('h',date,now)<24){
		result = dateUtil.dateDiff('h',date,now)+"小时前";
	}else if(dateUtil.dateDiff('d',date,now)<7){
		result = dateUtil.dateDiff('d',date,now)+"天前";
	}else if(dateUtil.dateDiff('w',date,now)<4){
		result = dateUtil.dateDiff('w',date,now)+"周前";
	}else if(dateUtil.dateDiff('m',date,now)<12){
		result = dateUtil.dateDiff('m',date,now)+"月前";
	}else if(dateUtil.dateDiff('y',date,now)>0){
		result = dateUtil.dateDiff('y',date,now)+"年前";
	}
	return result;
}

(function ($) {
	//获取URL参数
    $.getUrlParam = function (name) {
        var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
        var r = window.location.search.substr(1).match(reg);
        if (r != null) return unescape(r[2]); return null;
    };
    
    //获取中文参数
    $.getUrlParamCN = function (name) {
    	var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
    	var r = window.location.search.substr(1).match(reg);
    	if (r != null) return decodeURI(unescape(r[2])); return null;
    };
    //设置中文参数
    $.setUrlParamCN = function(nameCN){
    	return encodeURI(encodeURI(nameCN));
    };
    
})(jQuery);

/**
 * 过滤空字符
 * @param tempData
 * @returns
 */
function processUndefined(tempData) {
	return tempData == undefined ? '' : tempData; 
}